/************************************************************************
 * Este archivo, representa los metodos necesarios para reflejar las altas, 
 * bajas y modificaciones de un cliente en la base de datos
 * 
 * @system: veco-system
 * @description: Sistema de control vehicular
 * @version: 1.0
 * @Copyright © 2013 
 * 
 * @authores:
 * 
 *      > Alberione, Fernando    <falberione_037@gmail.com>
 * 
 *      > Boretto, Martin        <martinboretto@gmail.com>
 * 
 *      > Lenarduzzi, Federico   <fedeatenas@gmail.com>
 * 
 *      > Ocampo, Emanuel        <eocampo86@gmail.com>
 *
 *************************************************************************/

package SistemaCocheras;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class manejadorCliente{

    private Connection conexion = null;

    
    // ---------------------------------------------------------
    // ------- Seccion de constructores de la clase
    // ---------------------------------------------------------     
    
    /**
     * Constructor NO vacio
     */    
    public manejadorCliente(Connection c){
        this.conexion = c;
    }

    
    
    // ---------------------------------------------------------
    // ------- Seccion de metodos publicos auxiliares
    // ---------------------------------------------------------
    
    /**
     * Funcion encargada de insertar un nuevo cliente en la base de datos
     * @param dniP Representa el dni del nuevo cliente
     * @param nombreP Representa el nombre del nuevo cliente
     * @param apellidoP Representa el apellido del nuevo cliente
     * @param edadP Representa la edad del nuevo cliente
     * @param direccionP Representa la direccion del nuevo cliente
     * @param telefonoP Representa el telefono del nuevo cliente
     * @param tarifaP Representa la tarifa del nuevo cliente
     * @param tieneDesc Representa el descuento (o no) del nuevo cliente
     * @param cantDesc Representa el valor del descuento del nuevo cliente
     * @throws IOException
     * @throws SQLException 
     */
    public void insertarCliente(String dniP, String nombreP, String apellidoP, int edadP, 
                                String direccionP, String telefonoP, int tarifaP, boolean tieneDesc, 
                                float cantDesc) throws IOException, SQLException {
        Statement statemen = this.conexion.createStatement();
        int tDesc = 0;
        float cDesc = 0;
        if (tieneDesc){
            tDesc = 1;
            cDesc = cantDesc;
        }
        String query = "INSERT INTO persona VALUES('"+dniP+"', '"+nombreP+"', '"+apellidoP+"', '"+direccionP+"', '"+edadP+"', '"+telefonoP+"', '"+tarifaP+"', '"+tDesc+"', '"+cDesc+"')";
        statemen.executeUpdate(query);
    }// Fin insertarCliente

    
    /**
     * Funcion encargada de eliminar un cliente de la base de datos
     * @param dniP Representa el dni del cliente a eliminar
     * @throws SQLException 
     */
    public void eliminarCliente (String dniP) throws SQLException{
        Statement statemen = this.conexion.createStatement();
        String query = "DELETE FROM estadocliente WHERE(dnic ='"+dniP+"')";
        statemen.executeUpdate(query);
        String query1  = "UPDATE vehiculo SET dni_propietario = NULL WHERE (dni_propietario ='"+dniP+"')";
        statemen.executeUpdate(query1);
        String query2 = "DELETE FROM persona WHERE(dni ='"+dniP+"')";
        statemen.executeUpdate(query2);
    }// Fin eliminarCliente
    
    
    /**
     * Funcion encargada de buscar un cliente en la base de datos a partir de
     * su dni
     * @param dniP Representa el dni del cliente a buscar
     * @return res
     * @throws SQLException 
     */
    public ResultSet buscarClientePorDni(String dniP) throws SQLException{
        ResultSet res = null;
        Statement statemen = this.conexion.createStatement();
        String query = "SELECT * FROM persona WHERE(dni ='"+dniP+"')";
        res = statemen.executeQuery(query);
        return res;
    }// Fin buscarClientePorDni


    /**
     * Funcion encargada de buscar todos los clientes de la base de datos
     * @return res
     * @throws SQLException 
     */
    public ResultSet buscarClientes() throws SQLException{
        ResultSet res = null;
        Statement statemen = this.conexion.createStatement();
        String query = "SELECT * FROM persona ORDER BY apellido asc;";
        res = statemen.executeQuery(query);
        return res;
    }// Fin buscarClientes


    /**
     * Funcion encargada de actualizar los datos de un cliente en particular
     * de la base de datos
     * @param dniP Representa el dni del nuevo cliente
     * @param nombreP Representa el nombre del nuevo cliente
     * @param apellidoP Representa el apellido del nuevo cliente
     * @param edadP Representa la edad del nuevo cliente
     * @param direccionP Representa la direccion del nuevo cliente
     * @param telefonoP Representa el telefono del nuevo cliente
     * @param tarifaP Representa la tarifa del nuevo cliente
     * @param tieneDesc Representa el descuento (o no) del nuevo cliente
     * @param cantDesc Representa el valor del descuento del nuevo cliente
     * @param dniOrig Representa el dni del cliente a modificar
     * @throws IOException
     * @throws SQLException 
     */
    public void actualizarCliente(String dniP, String nombreP, String apellidoP, int edadP, String direccionP, 
                                  String telefonoP, int tarifaP, boolean tieneDesc, float cantDesc, 
                                  String dniOrig) throws IOException, SQLException {
        Statement statemen = this.conexion.createStatement();
        int tDesc = 0;
        float cDesc = 0;
        if (tieneDesc){
          tDesc = 1;
          cDesc = cantDesc;
        }
        String query = "UPDATE  persona SET dni='"+dniP+"', nombre='"+nombreP+"', apellido='"+apellidoP+"', direccion='"+direccionP+"'," +
                     " edad='"+edadP+"', telefono='"+telefonoP+"', tipotarifa='"+tarifaP+"', tiene_descuento='"+tDesc+"'," +
                     " porcentaje_descuento='"+cDesc+"' WHERE dni='"+dniOrig+"';";
        statemen.executeUpdate(query);
    }// Fin actualizarCliente
    
}// Fin class manejadorCliente